Jak ukoncit jiny proces v Kylixu
Otázka od: Daniel VALS
4. 12. 2002 11:50
Potreboval bych vedet jak mam programove ukoncit v linuxu jiny proces. Podle
meho nazoru vede jedina cesta pres zaslani signalu SIGTERM. Na to ale
potrebuju vedet PID jineho procesu. Funkce getpid() z knihovny Libc vraci
pouze PID vlastni aplikace. Nevite nekdo jak na to?
Daniel VALS, programator
Odpovedá: Dalibor Toman
4. 12. 2002 15:50
> Potreboval bych vedet jak mam programove ukoncit v linuxu jiny
proces. Podle
> meho nazoru vede jedina cesta pres zaslani signalu SIGTERM. Na to
ale
> potrebuju vedet PID jineho procesu. Funkce getpid() z knihovny Libc
vraci
> pouze PID vlastni aplikace. Nevite nekdo jak na to?
>
juknout na zdrojaky utilitky 'ps' pripadne 'top'. Podle vseho
neexistuje zadne pekne API jako ve Windows (psapi nebo jak se jmenuje
ta knihovna). Ostatne ani na Windows neni ve vsech verzich pritomna
jiz v instalaci.
FYI: probiralo se to nedavno v linux konferenci - snad Ti to pomuze:
http://www.linux.cz/cgi-bin/search.cgi?pattern=Seznam+bezicich&Hledat=
Hledat&list=linux&sensitive=yes&matches=20&word=yes&fuzziness=0
D. Toman
Odpovedá: Daniel VALS
5. 12. 2002 11:42
Dne st 4. prosinec 2002 14:58 jste napsal(a):
> > Potreboval bych vedet jak mam programove ukoncit v linuxu jiny
>
> proces. Podle
>
> > meho nazoru vede jedina cesta pres zaslani signalu SIGTERM. Na to
>
> ale
>
> > potrebuju vedet PID jineho procesu. Funkce getpid() z knihovny Libc
>
> vraci
>
> > pouze PID vlastni aplikace. Nevite nekdo jak na to?
>
> juknout na zdrojaky utilitky 'ps' pripadne 'top'. Podle vseho
> neexistuje zadne pekne API jako ve Windows (psapi nebo jak se jmenuje
> ta knihovna). Ostatne ani na Windows neni ve vsech verzich pritomna
> jiz v instalaci.
>
> FYI: probiralo se to nedavno v linux konferenci - snad Ti to pomuze:
> http://www.linux.cz/cgi-bin/search.cgi?pattern=Seznam+bezicich&Hledat=
> Hledat&list=linux&sensitive=yes&matches=20&word=yes&fuzziness=0
>
> D. Toman
Diky za ten odkaz. Z prispevku na konferenci sem napsal nasledujici fci,
ktera prochazi adresar /proc/ . Do paramertru fce se zadava nazev souboru
kterym byl proces spusten (nejlepe i s celou cestou).
function ZjistiPID(EXESoubor: string): integer;
var
sr: TSearchRec;
TXTSoubor: Text;
Radek: string;
begin
Result:= 0;
if FindFirst('/proc/*', faDirectory, sr) = 0 then
begin
repeat
if (sr.Attr and faDirectory) = faDirectory then
begin
if FileExists('/proc/'+ sr.Name+'/cmdline') then
begin
AssignFile(TXTSoubor, '/proc/'+ sr.Name+'/cmdline');
FileMode:= 0;
Reset(TXTSoubor);
Read(TXTSoubor, Radek);
if Pos(UpperCase(EXESoubor), UpperCase(Radek))>0 then Result:=
StrToInt(sr.Name);
CloseFile(TXTSoubor);
//Break;
end;
end;
until FindNext(sr) <> 0;
FindClose(sr);
end;
end;
Daniel VALS